package org.ourguy.mymoviesandshows.datamodel;

import java.util.Date;

/**
 * Title interface common to both Movie and TV Show
 * @author n.sobadjiev
 */
public interface ITitle extends IWatchable, IFavoritable, ExternalLinkProvider,
		ITrailerProvider, Comparable<ITitle> {
	
	/**
	 * Get the title
	 * @return the title
	 */
	public String getTitle();
	
	/**
	 * Get the release date of the title
	 * @return
	 */
	public java.util.Date getReleaseDate();
	
	/**
	 * Set the release date of the title
	 * @param date The date to set
	 */
	public void setReleaseDate(Date date);
	
	/**
	 * Get the runtime of the title
	 * @return the runtime
	 */
	public int getRuntime();
	
	/**
	 * Set the runtime of the title
	 * @param runtime the runtime to set
	 */
	public void setRuntime(int runtime);
	
	/**
	 * Get the plot of the title
	 * @return
	 */
	public String getPlot();
	
	/**
	 * Set the plot of the current title
	 * @param plot
	 */
	public void setPlot(String plot);
	
	/**
	 * Get the IMDB ID of the title
	 * @return
	 */
	public String getImdbId();
	
	/**
	 * Set the IMDB ID of the title
	 * @param id
	 */
	public void setImdbId(String id);
	
	/**
	 * Get the API-Specific ID of the title
	 * @return
	 */
	public String getApiId();
	
	/**
	 * Set the API-specific ID of the title
	 * @param id
	 */
	public void setApiId(String id);
	
	/**
	 * Get the genre of the title
	 * @return
	 */
	public String[] getGenre();
	
	/**
	 * Set the genre of the title
	 * @param genre
	 */
	public void setGenre(String[] genre);
	
	/**
	 * Get the cast of the title
	 * @return
	 */
	public Cast getCast();
	
	/**
	 * Set the cast of the title
	 * @param cast
	 */
	public void setCast(Cast cast);
	
	/**
	 * Get the rating of the title
	 * @return
	 */
	public float getRating();
	
	/**
	 * Set the rating of the title
	 * @param rating
	 */
	public void setRating(float rating);
	
	/**
	 * Get the hash code of this object
	 * @return
	 */
	public int hashCode();
	
	/**
	 * Check if we are the same object
	 * @param obj The object to check
	 * @return
	 */
	public boolean equals(Object obj);
	
	/**
	 * Get the cover art of the title
	 * @return the cover art
	 */
	public ICoverArt getCoverArt();
	
	/**
	 * Check if the item is in our tracking list.
	 */
	public boolean isTracked();
}
